package bookManage.Controller.servlet;

import bookManage.Model.entity.Book;
import bookManage.Model.service.ServiceImpl;
import bookManage.utils.DBUtil;
import bookManage.utils.JsonUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

/**
 * @BelongsProject: library-management-system-master
 * @BelongsPackage: bookManage.Controller
 * @Author: yuan wang
 * @CreateTime: 2023-02-01  22:26
 * @Description: 添加书籍的处理Servlet，由于是管理员端，所以用的get方法
 * 借鉴了学长获取前端数据的方法，调用完JsonUtil工具后将获得到的StringBuilder先转化成String再转为JSONObject类
 * @Version: 1.0
 */
@WebServlet(name = "AddBookServlet", value = "/manager/BookShow/AddBook")
public class AddBook extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取前端传来的数据，并且转化为JSONObject类（往后的Servlet不再赘述这条注释）
        String jsonString = String.valueOf(JsonUtil.getJson(req));
        JSONObject jsonObject = JSON.parseObject(jsonString);

        //创建Book实体类和ServiceImpl类，分别用于存储前端的数据并调用方法
        Book book = new Book();
        ServiceImpl service = new ServiceImpl();

        //将前端的数据通过键值对获取相应的值并存进Book类的book对象中
        book.setBookName(jsonObject.getString("bookName"));
        book.setWriter(jsonObject.getString("writer"));
        book.setKind(jsonObject.getString("kind"));
        book.setNumber(jsonObject.getString("number"));
        book.setPublish(jsonObject.getString("publish"));
        book.setBookIntroduction(jsonObject.getString("bookIntroduction"));
        book.setWriterIntroduction(jsonObject.getString("writerIntroduction"));
        book.setPicture(jsonObject.getString("picture"));

        //创建准备序列化的object对象（往后的Servlet不再赘述这条注释）
        PrintWriter out = resp.getWriter();
        JSONObject object = new JSONObject();

        try {
            //当添加书籍方法改变数据库行数为0，说明添加书籍失败，需要将错误信息返回给前端，这时候的页面跳转可以刷新该页面也可以不需要
            if (service.addBook(book) == 0) {
                object.put("code", "-1");
                object.put("message", "添加书籍失败");
                out.println(object);
            } else {
                //当添加书籍方法改变数据库行数为1的时候说明添加书籍成功，同样返回成功信息给前端
                object.put("code", "200");
                object.put("message", "添加书籍成功");
                out.println(object);
                //这里可以做一个自动的页面跳转，跳转回到书籍展示页面（非具体），如果需要再次添加可以再次点击添加书籍按钮进行添加
                //但是前端的同学们也可以进行跳转，所以我在这里就不写跳转了
            }
        } catch (SQLException e) {
            object.put("code", "-1");
            object.put("message", "添加书籍失败");
            out.println(object);
        } finally {
            try {
                DBUtil.freeConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}
